package chapter08

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test04_MatchObject
 * Package: chapter08
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-07-01
 *          Time: 10:38
 */

//匹配对象
object Test04_MatchObject {
  def main(args: Array[String]): Unit = {
    val student = new Student("alice", 18)
    //针对对象实例的内容进行匹配
    val ret = student match {
      //联想到之前的 Array和List 也是直接新创建的对象做匹配
      //但是他们用到的是伴生对象 所以 这里直接new是不行的
      //case new Student("alice",18) => "alice,18"
      //并且单纯的传一个apply对象是不行的 提示信息是说 没有实现当前伴生对象中的特殊方法unapply
      //如果单创建一个对象和另一个对象匹配的话 是比较对象的引用的
      //要判断的是内容 就要有一个方法告知 我判断的是对象的内容
      case Student("alice",18) => "alice,18"
      case _ => "Else"
    }
    println(ret)
  }
}
//定义类
class Student(val name: String, val age: Int)
//伴生对象
object Student {
  //apply 就是用来创建对象的
  def apply(name: String, age: Int): Student = new Student(name, age)

  //必须实现一个unapply方法 用来对对象属性进行拆解 对值进行比较
  def unapply(student: Student): Option[(String, Int)] = {
    if (student == null) {
      None
    } else {
      Some(student.name,student.age)
    }
  }
}
